Skip to content

[pull] main from MetaMask:main#345

Merged
pull[bot] merged 10 commits into
Reality2byte:mainfrom
MetaMask:main
Nov 21, 2025
Merged

[pull] main from MetaMask:main#345
pull[bot] merged 10 commits into
Reality2byte:mainfrom
MetaMask:main

Conversation

@pull
Copy link
Copy Markdown

@pull pull Bot commented Nov 21, 2025

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.4)

Can you help keep this open source service alive? 💖 Please sponsor : )

ffmcgee725 and others added 10 commits November 21, 2025 12:50
…ing `getNetworkImageSource` (#23089)

<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->

## **Description**

Incorrect Network (Solana) is displayed on dapp browsing when I have
Bitcoin/ or Tron selected in my wallet, because current logic either
renders EVM selected network, or defaults to Solana when something other
than EVM is selected.

This PR proposes a fix to handle non EVM networks accordingly.

<!--
Write a short description of the changes included in this pull request,
also include relevant motivation and context. Have in mind the following
questions:
1. What is the reason for the change?
2. What is the improvement/solution?
-->

## **Changelog**

<!--
If this PR is not End-User-Facing and should not show up in the
CHANGELOG, you can choose to either:
1. Write `CHANGELOG entry: null`
2. Label with `no-changelog`

If this PR is End-User-Facing, please write a short User-Facing
description in the past tense like:
`CHANGELOG entry: Added a new tab for users to see their NFTs`
`CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker`

(This helps the Release Engineer do their job more quickly and
accurately)
-->

CHANGELOG entry: Add logic to compute the correct non-EVM network image
source using `getNetworkImageSource`

## **Related issues**

Fixes: #22787

## **Manual testing steps**

```gherkin
Feature: Non EVM Image for AccountRightButton Component

  Scenario: user selects non evm network
    Given he does so in In App Browser

    When user selects non evm network via In App Browser AccountRightButton
    Then the correct network image should be displayed
```

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**


https://github.com/user-attachments/assets/e2d114cb-2a99-497b-9417-ee7877e98fc7

<!-- [screenshots/recordings] -->

### **After**


https://github.com/user-attachments/assets/5ca5dc99-e94a-41e3-a48c-371762a7320c

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [ ] I’ve followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [ ] I've completed the PR template to the best of my ability
- [ ] I’ve included tests if applicable
- [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [ ] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> Computes the proper non-EVM network image using getNetworkImageSource
and replaces the hardcoded Solana fallback in AccountRightButton.
> 
> - **UI**:
> - **AccountRightButton
(`app/components/UI/AccountRightButton/index.tsx`)**:
> - Compute non-EVM network image via `useMemo` and
`getNetworkImageSource` using `selectedNonEvmNetworkChainId`.
> - Replace hardcoded Solana fallback with computed `imageSource`; EVM
logic unchanged.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
2851891. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
…3064)

## **Description**

Reduce loading time when starting Perps and Predict deposit
confirmations.

## **Changelog**

CHANGELOG entry: null

## **Related issues**

Fixes:
[#6162](MetaMask/MetaMask-planning#6162)
[#6165](MetaMask/MetaMask-planning#6165)

## **Manual testing steps**

## **Screenshots/Recordings**

### **Before**

### **After**

## **Pre-merge author checklist**

- [x] I’ve followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I’ve included tests if applicable
- [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> Speeds up confirmation flows with memoization and streamlined
pay-token logic, adds safer Perps/Predict transaction options, updates
alerts/UI, and bumps transaction-controller.
> 
> - **Confirmations/Pay UX & Performance**:
> - Memoize calculations in `useGasFeeToken`, `useTokenAmount`, and
`pay-token-amount` with skeleton fallback; reduce recomputations and
unnecessary renders.
> - Refactor `useAutomaticTransactionPayToken` to use
`useTransactionPayAvailableTokens`, simplify selection logic, and remove
count-return path; update related tests.
> - Update `useTransactionPayMetrics` to derive payment token list size
from available tokens and drop dependency on automatic selector.
> - Improve `useTransactionPayToken` by making gas estimate fetch
non-blocking and flushing Engine state immediately.
> - Tighten recipient detection in `useTransferRecipient` to explicit
transfer types only.
> - **Perps/Predict Transactions**:
> - Perps deposit: add `skipInitialGasEstimate: true` when calling
`TransactionController.addTransaction`; test updated.
> - Predict deposit: add `disableUpgrade: true` and
`skipInitialGasEstimate: true` to `addTransactionBatch` options; tests
updated.
> - Safe utils: mark generated proxy/allowance/claim transactions as
`TransactionType.contractInteraction`.
> - **Alerts & Localization**:
> - `useInsufficientPayTokenBalanceAlert`: handle zero/negative target
amounts with alternate copy; add
`insufficient_pay_token_balance_fees_no_target` locale string.
> - **Engine**:
> - `EngineService`: flush Redux updates immediately for
`ApprovalController` and expose `flushState()`.
> - **Dependencies**:
> - Bump `@metamask/transaction-controller` to `62.1.0` (package.json
and yarn.lock).
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
f7c039c. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->

## **Description**

Upgrading tron to `1.10.0`
https://github.com/MetaMask/snap-tron-wallet/releases/tag/v1.10.0

<!--
Write a short description of the changes included in this pull request,
also include relevant motivation and context. Have in mind the following
questions:
1. What is the reason for the change?
2. What is the improvement/solution?
-->

## **Changelog**

<!--
If this PR is not End-User-Facing and should not show up in the
CHANGELOG, you can choose to either:
1. Write `CHANGELOG entry: null`
2. Label with `no-changelog`

If this PR is End-User-Facing, please write a short User-Facing
description in the past tense like:
`CHANGELOG entry: Added a new tab for users to see their NFTs`
`CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker`

(This helps the Release Engineer do their job more quickly and
accurately)
-->

CHANGELOG entry: null

## **Related issues**

Fixes: #22889

## **Manual testing steps**

```gherkin
Feature: my feature name

  Scenario: user [verb for user action]
    Given [describe expected initial app state]

    When user [verb for user action]
    Then [describe expected outcome]
```

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [ ] I’ve followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [ ] I've completed the PR template to the best of my ability
- [ ] I’ve included tests if applicable
- [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [ ] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> <sup>[Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) is
generating a summary for commit
cfa573a. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
#23105)

## **Description**

Fixed bottom padding in the Perps tab view where the "Start trading"
button was overlapping with the bottom navigation's "+" action button,
particularly noticeable on Android. Increased bottom padding from 12px
to 20px for both the positions/orders view and empty state to provide
adequate clearance.

**Changes:**
- Updated `tradeInfoContainer` style: paddingBottom from 12 to 30
- Added `emptyStateContainer` style with paddingBottom: 30
- Wrapped `PerpsEmptyState` component with styled View to apply
consistent padding

## **Changelog**

CHANGELOG entry: Fixed bottom padding in Perps tab to prevent overlap
with bottom navigation button

## **Related issues**

Fixes: <!-- Add issue number if applicable -->

## **Manual testing steps**

```gherkin
Feature: Perps tab bottom padding

  Scenario: user views Perps tab with positions/orders
    Given user has open positions or orders in the Perps tab

    When user navigates to the Perps tab
    Then the "Start trading" button should have adequate clearance from the bottom navigation
    And the button should not overlap with the "+" action button

  Scenario: user views empty Perps tab
    Given user has no positions or orders

    When user navigates to the Perps tab
    Then the empty state should have adequate clearance from the bottom navigation
    And content should not overlap with the "+" action button
```

## **Screenshots/Recordings**

### **Before**

<!-- Android: Start trading button overlapping with + button -->
<img width="397" height="376" alt="image"
src="https://github.com/user-attachments/assets/1df51259-b43f-4f5f-99ec-e415e7fbad17"
/>

<!-- iOS: Tight spacing with + button -->
<img width="412" height="476" alt="image"
src="https://github.com/user-attachments/assets/3e2ae99e-ec12-4a9d-967a-b7e5b815c243"
/>

### **After**

<!-- Android: 20px clearance from + button -->
<!-- iOS: 20px clearance from + button (consistent with Android) -->
<img width="397" height="432" alt="image"
src="https://github.com/user-attachments/assets/221fe494-181a-4122-924b-0107ee8b7f8c"
/>

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I've included tests if applicable
- [x] I've documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I've applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.


<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> Increase bottom padding for trade info and empty states in
`PerpsTabView` and wrap empty state in a padded container to avoid
overlap with bottom navigation.
> 
> - **UI (PerpsTabView)**:
>   - **Padding adjustments**:
> - `tradeInfoContainer` `paddingBottom`: `12` -> `30` in
`app/components/UI/Perps/Views/PerpsTabView/PerpsTabView.styles.ts`.
>     - Add `emptyStateContainer` with `paddingBottom: 30`.
>   - **Empty state layout**:
> - Wrap `PerpsEmptyState` in a `View` using
`styles.emptyStateContainer` in
`app/components/UI/Perps/Views/PerpsTabView/PerpsTabView.tsx` to apply
consistent bottom spacing.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
f5dc7ad. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
…3057)

<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->

## **Description**

<!--
Write a short description of the changes included in this pull request,
also include relevant motivation and context. Have in mind the following
questions:
1. What is the reason for the change?
2. What is the improvement/solution?
-->

Adds error and unsupported routing handling to the `useRampNavigation`
hook. The `goToBuy` function now checks the routing decision first and
navigates to the appropriate modal when the routing decision is `ERROR`
or `UNSUPPORTED`, before any other routing logic executes.

**Changes:**
- Added imports for `createEligibilityFailedModalNavigationDetails` and
`createRampUnsupportedModalNavigationDetails`
- Added early return checks in `goToBuy` to handle
`UnifiedRampRoutingType.ERROR` and `UnifiedRampRoutingType.UNSUPPORTED`
routing decisions
- When `ERROR` is detected, navigates to the eligibility failed modal
- When `UNSUPPORTED` is detected, navigates to the unsupported region
modal

This ensures users see appropriate error messages when ramp services are
unavailable or unsupported in their region, rather than attempting to
navigate to unavailable flows.

## **Changelog**

<!--
If this PR is not End-User-Facing and should not show up in the
CHANGELOG, you can choose to either:
1. Write `CHANGELOG entry: null`
2. Label with `no-changelog`

If this PR is End-User-Facing, please write a short User-Facing
description in the past tense like:
`CHANGELOG entry: Added a new tab for users to see their NFTs`
`CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker`

(This helps the Release Engineer do their job more quickly and
accurately)
-->

CHANGELOG entry: Added error and unsupported region handling to ramp
navigation flow

## **Related issues**

Fixes:

## **Manual testing steps**

```gherkin
Feature: Ramp navigation error handling
Scenario: user attempts to buy when routing decision is ERROR
Given the app has a routing decision of ERROR
When user triggers the buy flow
Then the eligibility failed modal should be displayed
Scenario: user attempts to buy when routing decision is UNSUPPORTED
Given the app has a routing decision of UNSUPPORTED
When user triggers the buy flow
Then the unsupported region modal should be displayed
```

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**


https://github.com/user-attachments/assets/6eb13363-2412-481b-b268-3ef1c3a58070



https://github.com/user-attachments/assets/5ffd32ef-6798-41a0-b868-dc258bb1b294


<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [ ] I’ve followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [ ] I've completed the PR template to the best of my ability
- [ ] I’ve included tests if applicable
- [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [ ] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> Adds early routing in `useRampNavigation.goToBuy` to show
eligibility-failed or unsupported modals when unified V1 is enabled,
with accompanying tests.
> 
> - **Hook updates**
>   - In `app/components/UI/Ramp/hooks/useRampNavigation.ts`:
> - `goToBuy` now checks `UnifiedRampRoutingType` first under unified
V1.
> - Routes to `createEligibilityFailedModalNavigationDetails()` on
`ERROR` and to `createRampUnsupportedModalNavigationDetails()` on
`UNSUPPORTED` (early return).
> - Preserves existing token selection and smart routing for `DEPOSIT`
vs `AGGREGATOR` when an `assetId` is present.
> - **Tests**
>   - In `app/components/UI/Ramp/hooks/useRampNavigation.test.ts`:
> - Adds test coverage for `ERROR` and `UNSUPPORTED` decisions
navigating to the respective modals (with and without intent).
>     - Retains tests for token selection and smart routing behaviors.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
7e686bb. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
….60.0 (#23102)

<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->

## **Description**

Fixed an issue where the `filterTabs` array in `PerpsTransactionsView`
was using translated strings, which could cause mismatches with the
filter logic that expects hardcoded values ('Trades', 'Orders',
'Funding', 'Deposits').

## **Changelog**

<!--
If this PR is not End-User-Facing and should not show up in the
CHANGELOG, you can choose to either:
1. Write `CHANGELOG entry: null`
2. Label with `no-changelog`

If this PR is End-User-Facing, please write a short User-Facing
description in the past tense like:
`CHANGELOG entry: Added a new tab for users to see their NFTs`
`CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker`

(This helps the Release Engineer do their job more quickly and
accurately)
-->

CHANGELOG entry: Fixed an issue where orders, and deposits would not
show if the user is not using english locale

## **Related issues**

Fixes: https://consensyssoftware.atlassian.net/browse/TAT-2093

## **Manual testing steps**

```gherkin
Feature: Perps Transactions View Filter Tabs

  Scenario: user switches between transaction filter tabs
    Given the user is on the Perps Transactions screen
    And the user uses French language
    And the user has transaction history data

    When user taps on the "Orders" tab
    Then the Orders filter should be active
    And only order transactions should be displayed

    When user taps on the "Funding" tab
    Then the Funding filter should be active
    And only funding transactions should be displayed

    When user taps on the "Deposits" tab
    Then the Deposits filter should be active
    And only deposit/withdrawal transactions should be displayed

    When user taps on the "Trades" tab
    Then the Trades filter should be active
    And only trade transactions should be displayed
```

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->


https://github.com/user-attachments/assets/53fd37db-a03c-4b68-985b-68d3beab20a7



### **After**

<!-- [screenshots/recordings] -->
<img width="1170" height="2532" alt="Simulator Screenshot - iPhone 16e -
2025-11-21 at 13 02 25"
src="https://github.com/user-attachments/assets/aaa03b7f-746c-46ab-b471-87c2e176ed70"
/>

## **Pre-merge author checklist**

- [ ] I’ve followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [ ] I've completed the PR template to the best of my ability
- [ ] I’ve included tests if applicable
- [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [ ] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> Use static `['Trades','Orders','Funding','Deposits']` for `filterTabs`
in `PerpsTransactionsView` to align with `FilterTab` and avoid locale
mismatches.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
22cf93d. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
## **Description**

This PR updates the Deposit BuildQuote screen title from "Deposit" to
"Buy" to better align with user-facing terminology and improve clarity
of the feature's purpose.

**Context**: As part of TRAM-2853, we're standardizing the naming across
the ramps experience. The Deposit feature is fundamentally a "buy
crypto" flow, so the title should reflect that action.

**Changes**:
- Updated `deposit.buildQuote.title` in `locales/languages/en.json` from
"Deposit" to "Buy"
- Updated test snapshots to reflect the title change

## **Changelog**

CHANGELOG entry: Changed Deposit BuildQuote screen title to "Buy"

## **Related issues**

Fixes: https://consensyssoftware.atlassian.net/browse/TRAM-2855
Refs: https://consensyssoftware.atlassian.net/browse/TRAM-2853

## **Manual testing steps**

```gherkin
Feature: Deposit BuildQuote Title

  Scenario: user views the Deposit BuildQuote screen
    Given the user has opened MetaMask Mobile
    And the user navigates to the Deposit flow

    When the user reaches the BuildQuote screen
    Then the screen title should display "Buy" instead of "Deposit"
```

## **Screenshots/Recordings**

### **Before**

<img width="300" alt="image"
src="https://github.com/user-attachments/assets/94e7a4fe-c74d-4fdb-ac57-eb0368deb36b"
/>


### **After**

<img width="300" alt="image"
src="https://github.com/user-attachments/assets/a13043e8-2dfc-4c1b-83fc-2256e32b9b4a"
/>


## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I've included tests if applicable
- [x] I've documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I've applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> Renames the Ramp BuildQuote screen title from "Deposit" to "Buy" and
updates corresponding snapshots and localization.
> 
> - **Localization**:
> - Update `deposit.buildQuote.title` in `locales/languages/en.json`
from `"Deposit"` to `"Buy"`.
> - **Tests**:
> - Refresh `BuildQuote` snapshots to reflect UI text change from
`"Deposit"` to `"Buy"` in
`app/components/UI/Ramp/Deposit/Views/BuildQuote/__snapshots__/BuildQuote.test.tsx.snap`.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
ab0383d. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
…gated balance (#23113)

<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->

## **Description**
fix aggregated balances on mobile
core PR: MetaMask/core#7216

<!--
Write a short description of the changes included in this pull request,
also include relevant motivation and context. Have in mind the following
questions:
1. What is the reason for the change?
2. What is the improvement/solution?
-->

## **Changelog**

<!--
If this PR is not End-User-Facing and should not show up in the
CHANGELOG, you can choose to either:
1. Write `CHANGELOG entry: null`
2. Label with `no-changelog`

If this PR is End-User-Facing, please write a short User-Facing
description in the past tense like:
`CHANGELOG entry: Added a new tab for users to see their NFTs`
`CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker`

(This helps the Release Engineer do their job more quickly and
accurately)
-->

CHANGELOG entry: fix missing native token balances in wallet balance

## **Related issues**

Fixes: #22775 

## **Manual testing steps**

```gherkin
Feature: my feature name

  Scenario: user [verb for user action]
    Given [describe expected initial app state]

    When user [verb for user action]
    Then [describe expected outcome]
```

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [ ] I’ve followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [ ] I've completed the PR template to the best of my ability
- [ ] I’ve included tests if applicable
- [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [ ] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> Patches @metamask/assets-controllers to lowercase account addresses
when updating token balances, resolving missing aggregated balances.
> 
> - **Assets Controllers Patch**:
> - Normalize account addresses to lowercase in
`dist/TokenBalancesController.{cjs,mjs}` when reading/writing
`d.tokenBalances[account]` to ensure balance updates persist.
> - **Dependencies**:
> - Switch `@metamask/assets-controllers@89.0.1` to a Yarn `patch:`
source in `package.json` and register the patch in `yarn.lock`
(`.yarn/patches/@metamask-assets-controllers-npm-89.0.1-02fa7acd54.patch`).
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
0fb1c03. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
## **Description**

This PR updates the copy for the Sell/Withdraw functionality in the
Ramps flow to improve clarity and consistency across the application.

**What is the reason for the change?**
The current implementation uses "Withdraw" terminology in various places
when referring to the sell crypto functionality. This can be confusing
for users as "Withdraw" typically implies moving funds from one account
to another, rather than selling crypto for cash.

**What is the improvement/solution?**
Updated all user-facing strings to consistently use "Sell" instead of
"Withdraw" for the sell crypto flow:
1. Fund Action Menu button and description
2. Asset Overview sell button  
3. Build Quote screen titles (simplified from "Amount to buy/sell" to
just "Buy/Sell")

This creates a clearer mental model for users and aligns with the actual
functionality - selling crypto for cash.

## **Changelog**

CHANGELOG entry: Changed "Withdraw" to "Sell" in the Fund Action Menu
and Asset Overview for improved clarity.

## **Related issues**

Fixes: https://consensyssoftware.atlassian.net/browse/TRAM-2854 (subtask
of https://consensyssoftware.atlassian.net/browse/TRAM-2853)

## **Manual testing steps**

```gherkin
Feature: Sell button copy changes

  Scenario: User views Fund Action Menu
    Given user is on the Wallet screen
    And user has a token with balance

    When user taps the "Buy" button on a token
    Then the Fund Action Menu should display
    And the sell option should read "Sell" (not "Withdraw")
    And the description should read "Sell crypto for cash"

  Scenario: User navigates to Build Quote for Sell
    Given user is on the Wallet screen
    And user has opened the Fund Action Menu

    When user taps the "Sell" button
    Then the Build Quote screen should open
    And the header title should display "Sell" (not "Amount to sell")

  Scenario: User navigates to Build Quote for Buy
    Given user is on the Wallet screen
    And user has opened the Fund Action Menu

    When user taps the "Buy" button
    Then the Build Quote screen should open
    And the header title should display "Buy" (not "Amount to buy")
```

## **Screenshots/Recordings**

| **Before** | **After** |
|------------|-----------|
| **Fund Action Menu - "Withdraw" button** | **Fund Action Menu - "Sell"
button** |
| <img width="300" alt="image"
src="https://github.com/user-attachments/assets/3de0e566-499b-46b5-8a14-4f3773c459b9"
/> | <img width="300" alt="image"
src="https://github.com/user-attachments/assets/1ba9354e-74f8-439c-8a1f-ba3c95dd9ae8"
/> |
| **Asset Overview - "Withdraw" button** | **Asset Overview - "Sell"
button** |
| <img width="300" alt="image"
src="https://github.com/user-attachments/assets/bedbab7c-ee06-4131-a149-3e3c90c67052"
/> | <img width="300" alt="image"
src="https://github.com/user-attachments/assets/6a60c1ef-4ae5-4b56-a070-f99987b39d74"
/> |
| **Build Quote - "Amount to buy" title** | **Build Quote - "Buy"
title** |
| <img width="300" alt="image"
src="https://github.com/user-attachments/assets/89559466-ec4b-4552-b878-19a778746901"
/> | <img width="300" alt="image"
src="https://github.com/user-attachments/assets/a71ffc50-ed6e-40af-8be5-636c170b7b71"
/> |
| **Build Quote - "Amount to sell" title** | **Build Quote - "Sell"
title** |
| <img width="300" alt="image"
src="https://github.com/user-attachments/assets/cd1f863c-7a2b-4315-a49a-0c15d7005be5"
/> | <img width="300" alt="image"
src="https://github.com/user-attachments/assets/116cc053-14a9-41e0-a7b8-295a833701a1"
/> |



## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I've included tests if applicable
- [x] I've documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I've applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.




<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> Replaces "Withdraw" with "Sell" across ramp UI strings and updates
Build Quote headers from "Amount to buy/sell" to "Buy/Sell", with
snapshots refreshed.
> 
> - **i18n (en)**:
> - Update `fund_actionmenu.sell` and `asset_overview.sell_button` from
`Withdraw` to `Sell` in `locales/languages/en.json`.
> - Simplify Build Quote labels: `fiat_on_ramp_aggregator.amount_to_buy`
-> `Buy`, `amount_to_sell` -> `Sell`.
> - **UI tests**:
> - Refresh snapshots in
`app/components/UI/Ramp/Aggregator/Views/BuildQuote/__snapshots__/BuildQuote.test.tsx.snap`
reflecting title changes from `Amount to buy/sell` to `Buy/Sell`.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
93c5b2d. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
## **Description**

This PR updates the README.md to improve branding consistency and visual
presentation:

1. **Updated main heading**: Changed from "MetaMask" to "MetaMask
Mobile" to better reflect that this is the mobile repository
2. **Refined logo display**: Converted the logo from markdown image
syntax to HTML `<img>` tag with a fixed width of 50px for better size
control and consistency

These changes improve the README's visual hierarchy and make it
immediately clear that this is the MetaMask Mobile repository.

## **Changelog**

CHANGELOG entry: null

## **Related issues**

Refs: 

## **Manual testing steps**

```gherkin
Feature: README documentation

  Scenario: user views the repository README
    Given the user navigates to the repository on GitHub
    
    When the user views the README.md
    Then the logo should display at 50px width
    And the main heading should read "MetaMask Mobile"
```

## **Screenshots/Recordings**

### **Before**
- Large logo using markdown syntax
- Heading: "MetaMask"

### **After**
- Compact logo (50px) using HTML img tag
- Heading: "MetaMask Mobile"

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I've included tests if applicable
- [x] I've documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I've applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> Update README: switch logo to 50px HTML image and rename main heading
to “MetaMask Mobile.”
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
a8669a1. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
@pull pull Bot locked and limited conversation to collaborators Nov 21, 2025
@pull pull Bot added the ⤵️ pull label Nov 21, 2025
@pull pull Bot merged commit dd15576 into Reality2byte:main Nov 21, 2025
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants